package tree.leetcode_110_easy;

public class IsBalanced {
    public boolean isBalanced(TreeNode root) {
        /*
            平衡二叉树需要满足的条件：
                1. 当前子树的左子树是平衡二叉树
                2. 当前子树的右子树是平衡二叉树
                3. 当前子树是平衡二叉树(即高度不超过 1)
        */
        // base case : 如果是空树，肯定是平衡的
        if (root == null) {
            return true;
        }

        return
                // 判断当前子树是不是平衡二叉树
                (Math.abs(getDepth(root.left) - getDepth(root.right))) <= 1 &&
                        // 判断当前子树的左子树是不是平衡二叉树
                        isBalanced(root.left) &&
                        // 判断当前子树的右子树是不是平衡二叉树
                        isBalanced(root.right);

    }

    // 计算最大深度
    public int getDepth(TreeNode root) {
        if (root == null) {
            return 0;
        }
        int left = getDepth(root.left);
        int right = getDepth(root.right);
        return Math.max(left, right) + 1;
    }
}
